package com.zjdiepu.www.ibiz.partner;

import java.util.List;
import java.util.Set;

import com.diepu.www.client.xhh.partner.request.ApplyLoanRequest;
import com.zjdiepu.www.base.enums.status.ThirdBusiStatus;
import com.zjdiepu.www.base.enums.status.ThirdCompensatoryStatus;
import com.zjdiepu.www.base.enums.type.ClientType;
import com.zjdiepu.www.base.enums.type.OperateType;
import com.zjdiepu.www.model.partner.dto.ThYwBusiness;
import com.zjdiepu.www.model.partner.ext.ThYwBusinessExt;
import com.zjdiepu.www.model.yw.response.YwBusinessDetail;

/**
 * Service层操作<br/>
 * @author xiongxiaotun<br/>
 * @time 2017年09月21日 10时04分<br/>
 * @since 1.0<br/>
 */
public interface IThYwBusinessService {
	/**
	 * 合作伙伴业务申请保存
	 * @author xiongxiaotun <br/>
	 * @Title saveOrUpdateThYwBusiness  <br/>
	 * @Description 合作伙伴业务申请保存 <br/>
	 * @param busiId
	 * @param ywBusinessDetail
	 * @param thirdBusiStatus
	 * @param thirdCompensatoryStatus
	 * @param clientType
	 * @param applyLoanRequest
	 * @param xeApplyNo
	 * @param salermanProvince
	 * @param currentUserId
	 * @param currentUserName
	 * @return
	 * @version V1.0  <br/>
	 */
	ThYwBusiness saveOrUpdateThYwBusiness(String busiType, String busiId, YwBusinessDetail ywBusinessDetail, 
				ThirdBusiStatus thirdBusiStatus, ThirdCompensatoryStatus thirdCompensatoryStatus,
					ClientType clientType, ApplyLoanRequest applyLoanRequest, String xeApplyNo, 
					String salermanProvince, String currentUserId, String currentUserName);
	
	/**
	 * 新增,更新和保存
	 * 
	 * @param ThYwBusiness 
	 * @param OperateType 操作类型 {@link OperateType}
	 */
	void saveUpdateAndDelete(ThYwBusiness thYwBusiness,OperateType operType);
	
	/**
	 * 条件查询
	 * @date 2017年09月21日 10时04分
	 * @param thYwBusinessExt
	 * @return
	 */
	List<ThYwBusiness> selectByExt(ThYwBusinessExt thYwBusinessExt);
	
	/**
	 * 条件统计
	 * @date 2017年09月21日 10时04分
	 * @param thYwBusinessExt
	 * @return
	 */
	int countByExt(ThYwBusinessExt thYwBusinessExt);
	
	/**
	 * 主键查询
	 * @date 2017年09月21日 10时04分
	 * @param id
	 * @return
	 */
	ThYwBusiness selectById(String id);
	
	/**
	 * 根据主键清除空字段，设置值为null
	 * @date 2017年09月21日 10时04分
	 * @param fieldNames 字段名
	 * @param id 主键
	 */
	void clearEmpty(Set<String> fieldNames, String id);
	/**
	 * 精确统计(=)
	 * @author xiongxiaotun
	 * @time 2017年09月21日 10时04分
	 * @since 1.0
	 * @update
	 * @param sysPower
	 * @return
	 */
	int countRefined(ThYwBusiness thYwBusiness);
	/**
	 * 精确查询(=)
	 * @author xiongxiaotun
	 * @time 2017年09月21日 10时04分
	 * @since 1.0
	 * @update
	 * @param thYwBusiness
	 * @return
	 */
	ThYwBusiness selectRefined(ThYwBusiness thYwBusiness);
	/**
	 * @author xiongxiaotun <br/>
	 * @Title repeat  <br/>
	 * @Description 判断是否重复 <br/>
	 * @param thYwBusiness
	 * @return
	 * @version V1.0  <br/>
	 */
	boolean repeat(ThYwBusiness thYwBusiness);
	
	/**
	 * @author xiongxiaotun <br/>
	 * @Title delectRefined  <br/>
	 * @Description 精确删除(=) <br/>
	 * @param thYwBusiness
	 * @return
	 * @version V1.0  <br/>
	 */
	int deletedRefined(ThYwBusiness thYwBusiness);
	
	/**
	 * @author xiongxiaotun <br/>
	 * @Title: updateBatch  <br/>
	 * @Description:批量删除/禁用/启用  <br/>
	 * @param modifier 修改人
	 * @param modifierName 修改人名称
	 * @param dpStatus 修改后状态
	 * @param ids 待修改数据ID
	 * @return
	 * @version V1.0  <br/>
	 */
	int updateBatch(String modifier, String modifierName, Integer dpStatus, List<String> ids);
	
	/**
	 * @author xiongxiaotun <br/>
	 * @Title: insertBatch  <br/>
	 * @Description: 批量添加 <br/>
	 * @param thYwBusinesss
	 * @return
	 * @version V1.0  <br/>
	 */
	int insertBatch(List<ThYwBusiness> thYwBusinesss);
	
}
